All the Columns in a grid, regardless of their visibility, can be accessed through a grid's ColumnCollection. The value of a Column's Index property represents its position within the ColumnCollection, while the visible position of a Column can be retrieved through its VisiblePosition property, which may or may not correspond to the Index property. In addition to the VisiblePosition property, the IsFirstVisible and IsLastVisible properties can be used to determine if a Column is the first or last one visible in a grid. A ColumnManagerRow's AllowColumnReorder property can prevent end users from changing the visible positions of Columns; however, programmatic changes to a Column's VisiblePosition property can still be made.
At runtime, data items can be grouped using a GroupByControl or HierarchicalGroupByControl, which provide a condensed view of the group levels and allow end users to modify the group descriptions applied to a grid and details. Each group level is represented by a GroupByItem or HierarchicalGroupByItem, which can be used to change the order of the groups, sort the data items, or remove the groups. A ColumnManagerRow can also be used to group and sort the data items.
End-user interaction can be limited through the ColumnManagerRow's AllowSort property, which prevents Columns from being sorted, the AllowGroupingModification property, which prevents groups from being added or removed, and the AllowColumnReorder property, which prevents Columns from being reordered. These properties only affect end-user interaction and do not prevent programmatic changes.
An "unbound column" is a Column that can be used to display non-data related information such as a label or controls that allow some sort of action to be carried out (e.g., a button to open a window in which the current item can be edited). Unlike data bound Columns, unbound one cannot be grouped or sorted and their values cannot be filtered.
When adding UnboundColumns, it often becomes necessary to access the parent Cell or Row from the element specified as the CellContentTemplate. The static FindFromChild method, which is defined in the Cell class, allows the parent Cell to be retrieved by specifying the element (usually the sender in the event arguments) used as the template. From the Cell returned by the FindFromChild method, the parent Row can be retrieved through the Cell's ParentRow property. If the parent data item is required, the parent Row can be provided to the grid's GetItemFromContainer method, which will return the parent data item.
The content of each Cell in a Column—assuming that said Column or its Cells are not read-only—can be edited at runtime by the end user through the use of CellEditors. These editors are created from DataTemplates (see Templates) and are used to edit the content of Cells. Custom CellEditors can be provided per Column by setting the CellEditor property, or per data type through the DataGridControl's DefaultCellEditors property (see Cell Editors). A Column's CellEditorDisplayConditions property can be set to override the display conditions determined by the parent grid.
When a Column's CanBeCurrentWhenReadOnly property is set to false and its ReadOnly property is true, its Cells cannot receive focus: clicking on these Cells has no effect, and using the keyboard (arrow keys, Tab key, etc.) causes the focus rectangle to skip them. Furthermore, the Cell's EditTemplate is not displayed. Note that the value of this property is ignored if the ReadOnly property is set to false.
For more information on editing a validating data, refer to the Editing Data topic.
In addition to the built-in container recycling, which applies to all views, the TableView class provides Column virtualization, meaning that Columns and Cells that are not visible in the viewport are not created until they are either brought into the viewport or accessed. If required, Column virtualization can be disabled by setting the IsColumnVirtualizationEnabled property to false (by default, it is set to true).
The GroupValueTemplate and GroupValueTemplateSelector properties determine how the value of a group is displayed, while the GroupConfiguration property determines the configuration of the same-level groups when the data items are grouped according to the values of the Column.
A Column's Title property represents the data that, by default, is displayed in its corresponding ColumnManagerCell and/or group-by item. If said property has not been explicitly set, the value of the FieldName property will be used. The DataTemplate used to display a Column's Title can be modified through the TitleTemplate property, while the TitleTemplateSelector property can be used to provide different title templates based on custom criteria (see Templates).